home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
System Booster
/
System Booster.iso
/
Diskmonitors
/
ShowDisk
/
Show_Disk.s
< prev
Wrap
Text File
|
1996-09-26
|
72KB
|
3,554 lines
opt l-,p-
_LVOAllocMem equ -198
_LVOFreeMem equ -210
_LVOAvailMem equ -216
_LVOAllocAbs equ -204
_LVOFreeEntry equ -228
_LVOAddTask equ -282
_LVOInsert equ -234
_SysBase equ 4
_LVOOpenScreen equ -198
_LVOOpenWindow equ -204
_LVOCloseScreen equ -66
_LVOCloseWindow equ -72
_LVOScreenToFront equ -252
_LVOScreenToBack equ -246
_LVOWindowToFront equ -312
_LVOWindowToBack equ -306
_LVOMoveWindow equ -168
_LVOModifyIDCMP equ -150
_LVOPolyDraw equ -336
_LVOMove equ -240
_LVOSetAPen equ -342
_LVORectFill equ -306
_LVODraw equ -246
_LVOText equ -60
_LVOScrollRaster equ -396
_LVOWait equ -318
_LVOAllocSignal equ -330
_LVOFreeSignal equ -336
_LVOSignal equ -324
_LVOGetMsg equ -372
_LVOAllocMem equ -198
_LVOFreeMem equ -210
_LVOViewPortAdress equ -300
_LVOSetRGB4 equ -288
_LVOSetAPen equ -342
_LVOSetBPen equ -348
_LVOWritePixel equ -324
_LVOOpen equ -30
_LVOClose equ -36
_LVORead equ -42
_LVOWrite equ -48
_LVOOutput equ -60
_LVOCurrentTime equ -84
_LVOFindTask equ -294
_LVORemTask equ -288
_LVODelay equ -198
_LVOOpenLibrary equ -552
_LVOCloseLibrary equ -414
_LVOAddPort equ -354
_LVORemPort equ -360
_LVOFindPort equ -390
_LVOGetMsg equ -372
_LVOPutMsg equ -366
_LVOReplyMsg equ -378
_LVOAddIntServer equ -168
_LVORemIntServer equ -174
_SysBase equ 4 ;Basis von Exec
_LVOOpenLibrary equ -552 ;Library oeffnen
_LVOCloseLibrary equ -414 ;Library schliessen
_LVOLock equ -84
_LVOUnLock equ -90
_LVOExecute equ -222
_LVOCurrentDir equ -126
_LVOAllocEntry equ -222
_LVOKickSumData equ -612
_LVOItemAdress equ -144
_LVOSetMenuStrip equ -264
_LVOClearMenuStrip equ -54
_LVOOpenDevice equ -444
_LVOCloseDevice equ -450
_LVODoIo equ -456
_LVOWaitPort equ -384
_LVOForbid equ -132
pr_CLI equ 172
pr_MsgPort equ 92
xl1 equ 0
yl1 equ 4
xr1 equ 8
yr1 equ 12
xl2 equ 16
yl2 equ 20
xr2 equ 24
yr2 equ 28
xxl1 equ 32
yyl1 equ 36
xxr1 equ 40
yyr1 equ 44
xxl2 equ 48
yyl2 equ 52
xxr2 equ 56
yyr2 equ 60
rp equ -4
dfi equ -16 ; Nr Laufwerk
bmflag equ -20 ; mit/ohne Bitmap
tr_open equ -24 ; Kennung für Track-Device offen/zu
bl_adr equ -28 ; ^auf Spei für 1 Block lesen (512)
spei_verw equ -32 ; ^ auf Speicher um Sp-Adr zu speichern
spei_off equ -36 ; fortlaufendes Offset dazu
ueb_ga1 equ -40 ; übergabe 1 (^ auf Sp von tatsächl Werte)
ueb_ga2 equ -44 ; übergabe 2 (^ auf Spei für Adr)
ak_dir equ -48 ; zeigt auf aktuelles Dir (n Schatten)
text_roh equ -52 ; ^ auf Speicher f ungeordneten Text
text_geo equ -56 ; ^ auf Speicher f geordneten Text
an_dir equ -60 ; Anzahl Zeilen im dir
erste_im_dir equ -64 ; Erste sichtbare (gescrollte) Zeile
erste_merken equ -68 ; ^auf den Textspeicher der 1. sichtbaren
gr_pfad equ -72 ; Anzahl buchstaben Pfadname
nr_gewählt equ -76 ; gewählte Nr
all_num equ -80 ; ^ auf Speicher mit allen Nr gezeichneter Balken
lfd_num equ -84 ; zeigt auf nächstes freies Nr-Feld(innerhalb von all_num)
n_chain_n equ -88 ; ^auf Spei wo next-Chain-Nr (n Sch)
n_chain_s equ -92 ; ^auf Spei wo next-Chain-Nr (Sch)
meldung equ -96 ; 0 keine Meldung,1 Meldung
select_down equ -100 ; 1 Maus down, 0 Maus up
alte_bl_nr equ -104
head equ -108 ; 0,1
block equ -112
track equ -116
sektor equ -120
mouse_x equ -124 ; Mousekoor. retten (f Fenster versvhieben)
mouse_y equ -128
text_zw equ -132 ; ^ auf Spei für zwischen-geord. Text
spr_farben equ -136
select_left equ -140 ; links runter
an_sc equ -144 ; 1,2,3 scrollen
spei_grö_verw equ 1000
spei_grö equ 532
off equ spei_grö-512
chain equ 124*4+off
parent equ 125*4+off ; ^auf Patent (Schatten)
extension equ 126*4+off ; (keine Zwischenräume beim Rechnen)
sec_type equ 127*4+off
hasch_r equ 77*4+off
hasch_v equ 6*4+off
name equ 108*4+off
dir_eintr equ 105*4+off ; Anzahl dir-Einträge (in n schatten vermerkt)
ist_gelesen equ 106*4+off ; 1 dann dir bereits gelesen ( im n Schatten)
eigen equ 1*4+off ; eigene Block-Nr
text_br equ 40 ; Speicherbreite pro Zeile bei textausgabe
spei_grö_text equ 100*text_br
off_zei equ 30 ; ^ auf Block wo dir ( schatten)
off_dir equ 34 ; Kennung welcher typ
off_bu equ 38 ; Anzahl Buchstaben
off_hin equ 39 ; kennung zum ordnen
off_off equ 30 ; offset auf offset(*40) im Zwischentext
text_x equ 6 ; koordinaten für Textbeginn (x)
text_y equ 35 ; koordinaten für Textbeginn (y)
text_yo equ 25 ; koord Textfenster
text_xo equ 20 ; koord Textfenster
text_xu equ 248 ; koord Textfenster
text_yu equ 233 ; koord.Textfenster
xl_1 equ 290
yl_1 equ 5
xr_1 equ 290+11*12-2+8
yr_1 equ 5+80*3-1+3
xl_2 equ 460
yl_2 equ 5
xr_2 equ 460+11*12-2+8
yr_2 equ 5+80*3-1+3
an_zeilen equ 20
DELAY macro
lea _DosBase(pc),a6
move.l (a6),a6
move.l #\1,d1
jsr _LVODelay(a6)
endm
MENUSTR macro
men_na\1
dc.l \2 ; Zeiger auf nächsten Menutitel
dc.w \3,\4 ; linke,obere Ecke
dc.w \5,0 ; Breite,Höhe (werden ignoriert)
dc.w 1 ; Flags (Menuenabled=1)
dc.l \6 ; Zeiger auf Menutitel
dc.l \7 ; Zeiger auf Str Menuitem
dc.w 0,0,0,0 ; Systemvariablen
endm
ITEMSTR macro
item\1
dc.l \2 ; Zeiger auf nächstes Item
dc.w \3,\4 ; links,oben
dc.w \5,\6 ; Breite,Höhe
dc.w \7 ; Text $2 + aktiviert $10 + kompletiert $40
dc.l 0 ; keine Abhängigkeiten
dc.l mentext\1 ; Zeiger auf Menutext
dc.l 0 ; kein alternativer Text
dc.b \8 ; alternative Tastaturangabe
dc.b 0 ; leer
dc.l 0 ; Zeiger auf Untermenu
dc.w 0 ; Intuition-Flag
endm
TEXTSTR macro
mentext\1
dc.b \2 ; Vordergrundfarbe
dc.b \3 ; Hintergrundfarbe
dc.b \6 ; Zeichenmodus JAM = 2 Invertiert = 0 Normal
dc.b 0 ; leer
dc.w \4,\5 ; linke,obere Ecke
dc.l 0 ; voreingestellter Zeichensatz
dc.l mtext\1 ; Zeiger auf String
dc.l 0 ; keine weitere Int-Test-str
endm
VERGLEICHMENU macro ; benutzt d0-d5,Mauskoor in d4,nicht überschrieben
; d2 außerhalb erhöhen,
; innerhalb dann d2 -> d5
move.l d4,d3 ; y-Wert in d3
and.l #$ffff,d3 ; und maskieren
move.l #0,d1 ; Zählregister
move.l #\2,d0
cmp.l d0,d3
bls vergl1\@
add.l #1,d1
vergl1\@
move.l #\4,d0
cmp.l d0,d3
bgt vergl2\@
add.l #1,d1
vergl2\@
move.l d4,d3 ; x-Wert in d3
lsr.l #8,d3
lsr.l #8,d3
move.l #\1,d0
cmp.l d0,d3
bls vergl3\@
add.l #1,d1
vergl3\@
move.l #\3,d0
cmp.l d0,d3
bgt vergl4\@
add.l #1,d1
vergl4\@
cmp.l #4,d1
bne vergl5\@
move.l d2,d5
vergl5\@
endm
LIBOEFFNEN macro
lea \1(pc),a1
moveq #0,d0
move.l _SysBase,a6
jsr _LVOOpenLibrary(a6)
tst.l d0
beq fini
lea \2(pc),a0
move.l d0,(a0)
endm
LIBSCHL macro
lea \1(pc),a1
move.l (a1),a1
move.l _SysBase,a6
jsr _LVOCloseLibrary(a6)
endm
LINIE macro
lea _GfxBase(pc),a6
move.l (a6),a6
move.l rp(a5),a1
move.l \1,d0
move.l \2,d1
IFEQ NARG-5
add.l #\5,d0
ENDC
jsr _LVOMove(a6)
move.l rp(a5),a1
move.l \3,d0
move.l \4,d1
IFEQ NARG-5
add.l #\5,d0
ENDC
jsr _LVODraw(a6)
endm
RECHTECK macro
LINIE \1,\2,\1,\4
LINIE \1,\2,\1,\4,1
LINIE \1,\4,\3,\4
LINIE \3,\4,\3,\2
LINIE \3,\4,\3,\2,-1
LINIE \3,\2,\1,\2
endm
FARBE macro ;um Farben zu setzen
lea _GfxBase(pc),a6 ; zuerst Farben setzen
move.l (a6),a6 ; _GfxBase in a6
lea viewportadv(pc),a0
move.l (a0),a0
move.l #\1,d0
move.l #\2,d1
move.l #\3,d2
move.l #\4,d3
jsr _LVOSetRGB4(a6)
endm
PEN macro
lea _GfxBase(pc),a6 ;
move.l (a6),a6
move.l rp(a5),a1
move.l #\1,d0
jsr _LVOSetAPen(a6)
IFEQ NARG-2
move.l rp(a5),a1
move.l #\2,d0
jsr _LVOSetBPen(a6)
ENDC
endm
TEXT macro
lea _GfxBase(pc),a6
move.l (a6),a6
move.l rp(a5),a1
move.l \1,d0
move.l \2,d1
jsr _LVOMove(a6)
move.l rp(a5),a1
move.l #\3,d0 ; Länge
lea \4,a0
jsr _LVOText(a6)
endm
*-----------------------------------------------------------------
* Startup-Code fuer Assembler-Programme.
* -----------------------------------------------------------
move.l _SysBase,a6
movem.l d0/a0,-(sp) ;rette Kommandozeile
clr.l _WBenchMsg ;sicherheitshalber
* Teste, von wo wir gestartet wurden
* ----------------------------------
sub.l a1,a1 ;a1=0 = eigener Task
jsr _LVOFindTask(a6) ;wo sind wir?
move.l d0,a4 ;Adresse retten
tst.l pr_CLI(a4) ;Laufen wir unter WB?
beq.s fromWorkbench ;wenn so
* Wir wurden vom CLI gestartet
* ----------------------------
movem.l (sp)+,d0/a0 ;Parms Kommandozeile holen
bra run ;und starten
* Wir wurden von Workbench gestartet
* -----------------------------------
fromWorkbench
lea pr_MsgPort(a4),a0
jsr _LVOWaitPort(a6) ;Warte auf Start-Message
lea pr_MsgPort(a4),a0 ;sie ist da
jsr _LVOGetMsg(a6) ;hole sie
move.l d0,_WBenchMsg ;immer Msg sichern!
movem.l (sp)+,d0/a0 ;bringe Stack i.O.
run bsr.s _main ;rufe unser Programm auf
move.l d0,-(sp) ;rette seinen Return-Code
tst.l _WBenchMsg ;gibt's eine WB-Message
beq.s _exit ;nein: dann war's CLI
jsr _LVOForbid(a6) ;keine Unterbrechung jetzt
move.l _WBenchMsg(pc),a1 ;hole die Message
jsr _LVOReplyMsg(a6) ;und gib sie zurueck
_exit
move.l (sp)+,d0 ;hole Return-Code
rts ;das war's
_WBenchMsg ds.l 1
cnop 0,2
_main ; ab hier steht Prg
*-----------------------------------------------------------------
lea tabelle(pc),a5
move.l #0,dfi(a5) ; df0
move.l #1,bmflag(a5) ; bitmap-flag = 1 => mit bitmap
move.l #0,tr_open(a5) ; trackdisk-device offen = 1
move.l #0,meldung(a5) ; Meldungsfeld auf 0 setzen
move.l #0,select_down(a5) ; nicht runtergeklickt
move.l #0,select_left(a5) ; nicht runtergeklickt (links)
move.l #0,alte_bl_nr(a5)
lea farben_normal_1,a0
move.l a0,spr_farben(a5)
LIBOEFFNEN dosname,_DosBase
LIBOEFFNEN intname,_IntBase
LIBOEFFNEN grafname,_GfxBase
*Screen u. Window öffnen----------------------------------------- v ----
lea NewScreen(pc),a0 ; Screen öffnen
lea _IntBase(pc),a6
move.l (a6),a6
jsr _LVOOpenScreen(a6)
lea screen(pc),a0 ; und fuer die window-struktur
move.l d0,(a0)
cmp.l #0,d0
beq screen_0
lea NewWindow(pc),a0 ; Window öffnen,_IntBase noch vorhanden
jsr _LVOOpenWindow(a6)
lea windowv(pc),a0 ; Windowzeiger sichern
move.l d0,(a0)
cmp.l #0,d0
beq window_0
move.l d0,a0
move.l 50(a0),d0 ; Rastportadr. in d0
lea rastportv(pc),a0 ; Rastportadr. sichern
move.l d0,(a0)
move.l d0,rp(a5)
lea _IntBase(pc),a6 ; Viewportadr. holen
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
jsr _LVOViewPortAdress(a6)
lea viewportadv(pc),a0
move.l d0,(a0)
bsr farben_schwarz
lea screen(pc),a0
lea screen_b(pc),a1
move.l (a0),(a1)
lea _IntBase(pc),a6
move.l (a6),a6
lea NewWindow_b(pc),a0 ; Window Block öffnen
jsr _LVOOpenWindow(a6) ; --------------------
lea window_b(pc),a0 ; Windowzeiger sichern
move.l d0,(a0)
cmp.l #0,d0
beq window_b0
move.l d0,a0
move.l 50(a0),d0 ; Rastportadr. in d0
lea rastport_b(pc),a0 ; Rastportadr. sichern
move.l d0,(a0)
move.l d0,rp(a5)
lea _IntBase(pc),a6 ; Viewportadr. holen
move.l (a6),a6
lea window_b(pc),a0
move.l (a0),a0
jsr _LVOViewPortAdress(a6)
lea viewportad_b(pc),a0
move.l d0,(a0)
lea window_b(pc),a0 ; kl Fenster nach hinten
move.l (a0),a0
jsr _LVOWindowToBack(a6)
PEN 13
move.l rp(a5),a1
move.l #0,d0
move.l #0,d1
move.l #160,d2
move.l #70,d3
jsr _LVORectFill(a6)
PEN 15 ; weiß
LINIE #4,#67,#155,#67
LINIE #4,#66,#155,#66
PEN 0 ; schwarz
LINIE #4,#2,#155,#2
LINIE #4,#3,#155,#3
LINIE #155,#4,#155,#67
LINIE #154,#4,#154,#67
LINIE #153,#4,#153,#66
LINIE #152,#4,#152,#66
PEN 15
LINIE #4,#2,#4,#67
LINIE #5,#2,#5,#67
LINIE #6,#3,#6,#67
LINIE #7,#3,#7,#67
lea rastportv(pc),a0
move.l (a0),rp(a5)
PEN 1
RECHTECK xl1(a5),yl1(a5),xr1(a5),yr1(a5)
RECHTECK xl2(a5),yl2(a5),xr2(a5),yr2(a5)
bsr raster
PEN 1
bsr tabellieren
PEN 4
move.l rp(a5),a1
move.l xxl1(a5),d0
move.l yyl1(a5),d1
move.l xxr1(a5),d2
move.l yyr1(a5),d3
jsr _LVORectFill(a6)
move.l rp(a5),a1
move.l xxl2(a5),d0
move.l yyl2(a5),d1
move.l xxr2(a5),d2
move.l yyr2(a5),d3
jsr _LVORectFill(a6)
PEN 5
RECHTECK xxl1(a5),yyl1(a5),xxr1(a5),yyr1(a5)
LINIE xxl1(a5),#11,xxr1(a5),#11
LINIE xxl1(a5),#12,xxr1(a5),#12
LINIE xxl1(a5),#23,xxr1(a5),#23
LINIE xxl1(a5),#24,xxr1(a5),#24
PEN 8
RECHTECK xxl2(a5),yyl2(a5),xxr2(a5),yyr2(a5)
PEN 0,4
TEXT #80,#8,11,text2(pc) ; x,y,Anzahl,^ auf Text
TEXT #10,#20,4,text3(pc) ; x,y,Anzahl,^ auf Text
* ---------------------- alle dfi ermitteln -----------------------
lea _DosBase(pc),a0 ; alle dfi ermitteln
move.l (a0),a0 ; Dosbase in a0
move.l 34(a0),a0 ; dl_Root -> struct RootNode
move.l 24(a0),d0 ; rn_Info -> struct DosInfo
asl.l #2,d0 ; BPTR * 4
move.l d0,a0
move.l 4(a0),d0 ; di_DevInfo -> struct DeviceNode
asl.l #2,d0 ; BPTR * 4
move.l d0,a0
test_dev0
cmp.l #0,d0
beq test_d_out
move.l 40(a0),a1 ; ^ auf Namen
move.l a1,d0 ;
asl.l #2,d0 ; BPTR * 4
move.l d0,a1
move.l #3,d1 ; nach df0-df3 suchen
lea dfi_name(pc),a2
test_dev1
move.l a2,a4
move.l #2,d2
move.l a1,a3
adda.l #1,a3 ; wegen BCPL - Namen
test_dev2
cmpm.b (a3)+,(a4)+
bne test_dev4
dbra d2,test_dev2
move.l #0,(a2) ; dann 0 anstelle des Namens eintragen
bra test_dev5 ; und nächstes aus Liste untersuchen
test_dev4
adda.l #4,a2
dbra d1,test_dev1
test_dev5
move.l (a0),d0 ; nächste -> struct DeviceNode
asl.l #2,d0 ; BPTR * 4
move.l d0,a0
bra test_dev0
test_d_out
lea dfi_name(pc),a2 ; nun 0 in ITEM-str setzen
move.l (a2)+,d0
move.l (a2)+,d0
cmp.l #0,d0 ; df1 = 0 ?
beq nicht_1
lea item11(pc),a0
move.l #0,(a0)
nicht_1
move.l (a2)+,d0
cmp.l #0,d0 ; df2 = 0 ?
beq nicht_2
lea item12(pc),a0
move.l #0,(a0)
nicht_2
move.l (a2)+,d0
cmp.l #0,d0 ; df3 = 0 ?
beq nicht_3
lea item13(pc),a0
move.l #0,(a0)
nicht_3
* ------- Menuaufruf ----------
lea item22(pc),a0 ; Zeiger auf Untermenü
lea item220(pc),a1
move.l a1,28(a0)
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
lea Menustruktur(pc),a1 ; Adr der Menustr.
jsr _LVOSetMenuStrip(a6) ; Menu aktivieren - liefert kein Ergebnis !
move.l _SysBase,a6
move.l #512,d0
move.l #$10002,d1 ; Chip + clear
jsr _LVOAllocMem(a6) ; Speicher fuer einen block
move.l d0,bl_adr(a5)
cmp.l #0,d0
beq bl_0
move.l #spei_grö_verw,d0
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Speicherverwaltung
move.l d0,spei_verw(a5)
move.l #0,spei_off(a5)
cmp.l #0,d0
beq spei_0
move.l #spei_grö_text,d0
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Textverwaltung(roh)
move.l d0,text_roh(a5)
cmp.l #0,d0
beq text_roh_0
move.l #spei_grö_text,d0
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Textverwaltung(geordnet)
move.l d0,text_zw(a5)
cmp.l #0,d0
beq text_zw_0
move.l #spei_grö_text,d0
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Textverwaltung(geordnet)
move.l d0,text_geo(a5)
cmp.l #0,d0
beq text_geo_0
move.l #1760*2,d0 ; speicher für alle gezeichneten Balken
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Textverwaltung(geordnet)
move.l d0,all_num(a5)
cmp.l #0,d0
beq all_num_0
bsr farben_normal_1
warten
bsr frei_ermitteln
lea windowv(pc),a0 ; Hole Adr. MessagePort des Fensters
move.l (a0),a0
move.l 86(a0),a0 ; steht ab 86
move.l _SysBase,a6
jsr _LVOWaitPort(a6) ; Warten auf Msg in Port
lea windowv(pc),a0 ; Hole Adr. MessagePort des Fensters
move.l (a0),a0
move.l 86(a0),a0 ; steht ab 86
move.l _SysBase,a6
jsr _LVOGetMsg(a6) ; Message vom Port in a0 holen
cmp.l #0,d0
beq warten ; 0,dann ligt keine Msg vor
move.l d0,a1 ; Zeiger auf die messagestruktur
move.l 20(a1),d3 ; Klasse der Message
move.l #0,d2
move.w 24(a1),d2 ; Code der Message
move.l 32(a1),d4 ; Mauskoor
jsr _LVOReplyMsg(a6) ; zurückschicken
move.l meldung(a5),d0
cmp.l #0,d0
beq k_meldung
move.l spr_farben(a5),a0
jsr (a0)
move.l #0,meldung(a5)
PEN 4 ; Feld löschen
move.l rp(a5),a1
move.l #text_x,d0
move.l #241,d1
move.l #text_xu,d2
move.l #249,d3
jsr _LVORectFill(a6)
bsr nr_loeschen ; alte Angaben immer löschen
bra maus10_1
k_meldung
move.l select_down(a5),d0
cmp.l #0,d0
beq mouse_links
cmp.l #$10,d3 ; $10 = Mousemove
bne mouse_up
move.l #6,d5
bra nur_zw_teil
mouse_up
cmp.l #$8,d3 ; $8 = Mousemoutton( up ?)
bne warten
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$108,d0 ; botton 8 - Pick 100
jsr _LVOModifyIDCMP(a6)
move.l #0,select_down(a5)
lea window_b(pc),a0 ; kl Fenster nach hinten
move.l (a0),a0
jsr _LVOWindowToBack(a6)
move.l alte_bl_nr(a5),d6
PEN 0
bsr nr_um ; alte Umrandung weg
bra warten
mouse_links
move.l select_left(a5),d0
cmp.l #0,d0
beq mouse_bottom
cmp.l #$10,d3 ; $10 = Mousemove
bne mouse_up_links
move.l #6,d5
move.l #3,d2
VERGLEICHMENU text_xo,text_yo,text_xu,text_yu
cmp.l #3,d5
beq maus0
bra warten
mouse_up_links
cmp.l #$8,d3 ; $8 = Mousemoutton( up ?)
bne warten
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$108,d0 ; botton 8 - Pick 100
jsr _LVOModifyIDCMP(a6)
move.l #0,select_left(a5)
bra warten
mouse_bottom
cmp.l #$8,d3 ; $8 = Mousebutton
bne menu_pick
cmp.w #104,d2 ; Selectdown
bne warten
move.l #0,d5
move.l #1,d2
VERGLEICHMENU text_xo,0,text_xu,10
move.l #2,d2
VERGLEICHMENU text_xo,11,text_xu,20
move.l #3,d2
VERGLEICHMENU text_xo,text_yo,text_xu,text_yu
nur_zw_teil
move.l #4,d2
VERGLEICHMENU xl_1,yl_1,xr_1,yr_1
move.l #5,d2
VERGLEICHMENU xl_2,yl_2,xr_2,yr_2
cmp.l #0,d5
beq warten ; nichts gewählt
cmp.l #3,d5
bne maus10
maus0 ; großes Feld angeklickt
move.l #1,select_left(a5)
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$118,d0 ; botton 8 - Pick 100 - Move 10
jsr _LVOModifyIDCMP(a6)
and.l #$ffff,d4 ; y-Maus maskieren
sub.l #text_yo,d4
divu #10,d4 ; Nr angeklickt in d4
and.l #$ffff,d4 ; ohne den Rest
move.l erste_im_dir(a5),d0
cmp.l #0,d0
beq nicht_sc1 ; wenn text oben beginnt -> n. scrollen
cmp.l #1,d4
bgt nicht_sc1 ; sont > zeile 3 angeklickt -> n. scr
bsr n_oben_scr
wei_scr1
lea windowv(pc),a0 ; Hole Adr. MessagePort des Fensters
move.l (a0),a0
move.l 86(a0),a0 ; steht ab 86
move.l _SysBase,a6
jsr _LVOGetMsg(a6) ; Message vom Port in a0 holen
cmp.l #0,d0
beq wei_scr2 ; 0,dann ligt keine Msg vor
move.l d0,a1 ; Zeiger auf die messagestruktur
move.l 20(a1),d3 ; Klasse der Message
move.l #0,d2
move.w 24(a1),d2 ; Code der Message
move.l 32(a1),d4 ; Mauskoor
jsr _LVOReplyMsg(a6) ; zurückschicken
cmp.l #$10,d3
beq mouse_links
cmp.l #$8,d3
beq mouse_up_links
wei_scr2
lea windowv(pc),a0 ; Hole Adr. MessagePort des Fensters
move.l (a0),a0
move.w 12(a0),d4 ; maus-koor holen
bra maus0
nicht_sc1
move.l an_dir(a5),d1
add.l #an_zeilen,d0
cmp.l d1,d0
bgt nicht_sc2 ; wenn text unten sichtbar -> n. scrollen
cmp.l #an_zeilen-2,d4
bls nicht_sc2 ; sont > zeile 3 angeklickt -> n. scr
bsr n_unten_scr
bra wei_scr1
bra warten
nicht_sc2
move.l erste_im_dir(a5),d0
add.l d4,d0
move.l nr_gewählt(a5),d1
cmp.l d0,d1
beq warten ; altes und neues feld identisch !
move.l d0,nr_gewählt(a5)
move.l text_geo(a5),a4
mulu #text_br,d0
add.l d0,a4
move.l off_dir(a4),d0
cmp.w #-3,d0
bne new_dir
bsr datei_anzeigen
bra warten
new_dir
cmp.w #2,d0
bne kein_dir
move.l ak_dir(a5),a0
move.l off_zei(a4),a1
move.l (a1),ak_dir(a5) ; neues aktuelles dir eintragen (ist nicht Schatten)
move.l (a0),a0 ; -> Schatten
move.l ak_dir(a5),a1
move.l (a1),a1 ; -> Schatten
move.l a0,parent(a1) ; im Schatten ^auf parent eintragen
move.l ak_dir(a5),a0
move.l ist_gelesen(a0),d0
cmp.l #1,d0
beq new0
bsr disk_eingelegt
bsr dir_lesen
new0
bsr text_ermitteln
move.l an_dir(a5),d0 ; keine datei im Dir
cmp.l #0,d0
beq new1
bsr text_ordnen
bsr text_ausgeben
new1
bra warten
kein_dir
bra warten
maus10
cmp.l #1,d5
bne maus20
maus10_1 ; Parent angeklickt
; --------------------
move.l ak_dir(a5),a0
move.l (a0),a0 ; -> Schatten
move.l parent(a0),a0 ; im Schatten ^auf parent holen
cmpa.l #0,a0 ; ^ = 0 dann Root
beq maus11 ; dann nichts neues ausgeben !
move.l (a0),a0 ; -> n Schatten
move.l a0,ak_dir(a5) ; neues aktuelles dir eintragen (ist nicht Schatten)
bsr pfad_kuerzen
bsr text_ermitteln
bsr text_ordnen
bsr text_ausgeben
maus11
bra warten
maus20
cmp.l #2,d5
bne maus30
; Dir angeklickt
bra warten ; ---------------
maus30
cmp.l #4,d5 ; linkes Kästchenfeld angeklickt
bne maus40 ; -------------------------------
move.l #xl_1,a4
move.l #0,head(a5)
bsr block_nr_aus
bra warten
maus40
cmp.l #5,d5 ; rechtes Kästchenfeld angeklickt
bne maus50 ; -------------------------------
move.l #xl_2,a4
move.l #1,head(a5)
bsr block_nr_aus
bra warten
maus50 ; d5 = 6
bra warten
menu_pick
cmp.l #$100,d3 ; $100=Menupick
bne warten ; ---------------
cmp.w #$ffff,d2 ; $ffff=Menunull, Kein Menu gewählt
beq warten
move.l d2,d1 ; Menunummer holen
and.w #$001f,d1 ; maskieren mit 11111 = $1f
asr.w #5,d2 ; Itemnr holen
and.w #$003f,d2 ; durch maskieren mit 111111
; 1.Item = d2 = 0 ! 2.Item: d2=1
cmp.w #0,d1 ; 1. Menu gewählt ?
bne menu10 ; -------------------
menu1
cmp.w #0,d2 ; df0:
bne menu2
move.l #0,dfi(a5)
bra menu5
menu2
cmp.w #1,d2 ; df1:
bne menu3
move.l #1,dfi(a5)
bra menu5
menu3
cmp.w #2,d2 ; df2:
bne menu4
move.l #2,dfi(a5)
bra menu5
menu4
cmp.w #3,d2 ; df3:
bne warten
move.l #3,dfi(a5)
bra menu5
menu5
move.l #0,ak_dir(a5) ; als kennung wenn fehler in doppelspei
bsr track_auf ; trackdisk-device öffnen
bsr disk_eingelegt
move.l #880,d0 ; Block Nr in d0
bsr block_read ; ein block lesen
bsr motor_aus
movem.l d0-d1,-(sp) ; wegen möglichen Ausspr in doppelspei
bsr doppel_spei ; Doppelspeicher anfordern
lea 8(sp),sp ; Stack zurück
move.l ueb_ga1(a5),ak_dir(a5) ; aktuelles dir eintragen (ist nicht Schatten)
bsr block_umsp ; Block umspeichern
bsr bitmap_holen
move.l bmflag(a5),d0 ; Bitmap Flag
cmp.l #0,d0
beq menu3.1
bsr bitmap_ausgeben
menu3.1
bsr dir_lesen
bsr text_ermitteln
move.l an_dir(a5),d0 ; keine datei im Dir
cmp.l #0,d0
beq menu9
bsr text_ordnen
bsr text_ausgeben
menu9
bra warten
menu10
cmp.w #1,d1 ; 2. Menu gewählt ?
bne menu20 ; ---------------------
cmp.w #0,d2 ; Bitmap ?
bne menu12
move.l bmflag(a5),d0 ; Flag ändern
bchg #0,d0
move.l d0,bmflag(a5)
bsr bitmap_ausgeben ; geänderte Bitmap ausgeben
bra warten
menu12
cmp.w #1,d2 ; Freier speicher
bne menu13
bra warten
menu13
cmp.w #2,d2 ; Screen zurück
bne menu14
lea _IntBase(pc),a6
move.l (a6),a6
lea screen(pc),a0
move.l (a0),a0
jsr _LVOScreenToBack(a6)
bra warten
menu14
cmp.w #3,d2 ; und Coulors = 3 ?
bne warten
move.l spr_farben(a5),a0
lea farben_normal_1,a1
cmpa.l a0,a1
bne menu15
lea farben_normal_2,a0
move.l a0,spr_farben(a5)
jsr (a0)
bra warten
menu15
lea farben_normal_2,a1
cmpa.l a0,a1
bne menu16
lea farben_normal_3,a0
move.l a0,spr_farben(a5)
jsr (a0)
bra warten
menu16
lea farben_normal_3,a1
cmpa.l a0,a1
bne menu17
lea farben_normal_4,a0
move.l a0,spr_farben(a5)
jsr (a0)
bra warten
menu17
lea farben_normal_4,a1
cmpa.l a0,a1
bne menu18
lea farben_normal_1,a0
move.l a0,spr_farben(a5)
jsr (a0)
bra warten
menu18
bra warten
menu20
cmp.w #2,d1 ; 3. Menu gewählt ?
bne warten ; --------------------
cmp.w #0,d2 ; Info (engl) ?
bne menu22
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$0,d0 ; keine Meldung
jsr _LVOModifyIDCMP(a6)
bsr info_engl
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$108,d0 ; botton 8 - Pick 100
jsr _LVOModifyIDCMP(a6)
bra warten
menu22
cmp.w #1,d2 ; und Quit = 1 ?
bne warten
bra menuende
menuende
bsr block_sp_frei ; gibt alle geholten Sp-Blöcke Frei
move.l _SysBase,a6
move.l #1760*2,d0 ; speicher für alle gezeichneten Balken frei
move.l all_num(a5),a1
jsr _LVOFreeMem(a6)
all_num_0
move.l #spei_grö_text,d0
move.l text_geo(a5),a1
jsr _LVOFreeMem(a6) ; Speicher fuer Text-Verwaltung zurück
text_geo_0
move.l #spei_grö_text,d0
move.l text_zw(a5),a1
jsr _LVOFreeMem(a6) ; Speicher fuer Text-Verwaltung zurück
text_zw_0
move.l #spei_grö_text,d0
move.l text_roh(a5),a1
jsr _LVOFreeMem(a6) ; Speicher fuer Text-Verwaltung zurück
text_roh_0
move.l #spei_grö_verw,d0
move.l spei_verw(a5),a1
jsr _LVOFreeMem(a6) ; Speicher fuer Sp-Verwaltung zurück
spei_0
move.l #512,d0
move.l bl_adr(a5),a1
jsr _LVOFreeMem(a6) ; Speicher fuer einen block zurück
bl_0
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
jsr _LVOClearMenuStrip(a6) ; Menu entfernen
move.l tr_open(a5),d0
cmp.l #0,d0
beq nie_auf ; tr war nie auf
move.l _SysBase,a6
lea readrepl,a1
jsr _LVORemPort(a6) ; MsgPort entfernen
lea diskio,a1
jsr _LVOCloseDevice(a6) ; Device schließen
nie_auf
lea _IntBase(pc),a6 ; Window Block schließen
move.l (a6),a6
lea window_b(pc),a0
move.l (a0),a0
jsr _LVOCloseWindow(a6)
window_b0
lea _IntBase(pc),a6 ; Window und Screen schließen
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
jsr _LVOCloseWindow(a6)
window_0 ; dann noch IntBase in a6
lea screen(pc),a0
move.l (a0),a0
jsr _LVOCloseScreen(a6)
screen_0
LIBSCHL _GfxBase
LIBSCHL _IntBase
LIBSCHL _DosBase
fini rts
*---------------------------------------------------------------------------------
farben_normal_1
FARBE 0,0,0,0 ; Farbe schwarz
FARBE 1,15,15,0 ; Farbe Bitmapumrandung(gelb)
FARBE 2,5,5,0 ; Farbe unbelegte Bitmap(dunkelgelb)
FARBE 3,10,10,0 ; Farbe belegte Bitmap(mittelgelb)
FARBE 4,7,7,7 ; Farbe linkes "Fenster"
FARBE 5,15,0,0 ; Farbe Umrandung dazu (rot)
FARBE 6,0,0,15 ; Farbe Directory (blau)
FARBE 7,12,9,0 ; Farbe Directory im text (braun)
FARBE 8,0,15,0 ; Farbe Kasten angeklickt (grün)
FARBE 9,12,0,15 ; Farbe Nr angeklickt (violett)
FARBE 10,0,15,15 ; Farbe Nr angeklickt header (violett)
FARBE 12,15,12,0 ; Farbe Umrandung (orange)
FARBE 13,7,12,15 ; Farbe Hintergrund Block-W ()
FARBE 14,15,0,15 ; Farbe weiß
FARBE 15,15,15,15 ; Farbe Menu (blau)
rts
*---------------------------------------------------------------------------------
farben_normal_2
FARBE 0,0,0,10 ; Farbe schwarz
FARBE 1,15,15,0 ; Farbe Bitmapumrandung(gelb)
FARBE 2,5,5,0 ; Farbe unbelegte Bitmap(dunkelgelb)
FARBE 3,10,10,0 ; Farbe belegte Bitmap(mittelgelb)
FARBE 4,11,15,15 ; Farbe linkes "Fenster"
FARBE 5,15,0,0 ; Farbe Umrandung dazu (rot)
FARBE 6,15,4,0 ; Farbe Directory (blau)
FARBE 7,12,9,0 ; Farbe Directory im text (braun)
FARBE 8,0,0,0 ; Farbe Kasten angeklickt (grün)
FARBE 9,0,15,0 ; Farbe Nr angeklickt (violett)
FARBE 10,15,8,8 ; Farbe Nr angeklickt header (violett)
FARBE 12,7,7,7 ; Farbe Umrandung (orange)
FARBE 13,7,7,7 ; Farbe Hintergrund Block-W ()
FARBE 14,15,0,15 ; Farbe weiß
FARBE 15,15,15,15 ; Farbe Menu (blau)
rts
*---------------------------------------------------------------------------------
farben_normal_3
FARBE 0,0,0,0 ; Farbe schwarz
FARBE 1,15,15,0 ; Farbe Bitmapumrandung(gelb)
FARBE 2,0,15,15 ; Farbe unbelegte Bitmap(dunkelgelb)
FARBE 3,0,10,10 ; Farbe belegte Bitmap(mittelgelb)
FARBE 4,10,15,10 ; Farbe linkes "Fenster"
FARBE 5,15,0,0 ; Farbe Umrandung dazu (rot)
FARBE 6,6,0,15 ; Farbe Directory (blau)
FARBE 7,12,0,9 ; Farbe Directory im text (braun)
FARBE 8,0,0,15 ; Farbe Kasten angeklickt (grün)
FARBE 9,12,9,0 ; Farbe Nr angeklickt (violett)
FARBE 10,8,5,0 ; Farbe Nr angeklickt header (violett)
FARBE 12,15,12,0 ; Farbe Umrandung (orange)
FARBE 13,15,7,0 ; Farbe Hintergrund Block-W ()
FARBE 14,15,0,15 ; Farbe weiß
FARBE 15,15,15,15 ; Farbe Menu (blau)
rts
*---------------------------------------------------------------------------------
farben_normal_4
FARBE 0,0,0,0 ; Farbe schwarz
FARBE 1,0,15,15 ; Farbe Bitmapumrandung(gelb)
FARBE 2,7,15,7 ; Farbe unbelegte Bitmap(dunkelgelb)
FARBE 3,5,5,15 ; Farbe belegte Bitmap(mittelgelb)
FARBE 4,15,12,5 ; Farbe linkes "Fenster"
FARBE 5,15,0,0 ; Farbe Umrandung dazu (rot)
FARBE 6,6,0,8 ; Farbe Directory (blau)
FARBE 7,12,0,9 ; Farbe Directory im text (braun)
FARBE 8,0,0,15 ; Farbe Kasten angeklickt (grün)
FARBE 9,12,9,0 ; Farbe Nr angeklickt (violett)
FARBE 10,8,5,0 ; Farbe Nr angeklickt header (violett)
FARBE 12,15,12,0 ; Farbe Umrandung (orange)
FARBE 13,15,7,0 ; Farbe Hintergrund Block-W ()
FARBE 14,15,0,15 ; Farbe weiß
FARBE 15,15,15,15 ; Farbe Menu (blau)
rts
*---------------------------------------------------------------------------------
farben_schwarz
FARBE 0,0,0,0 ; Farbe schwarz
FARBE 1,0,0,0 ; Farbe Bitmapumrandung(gelb)
FARBE 2,0,0,0 ; Farbe unbelegte Bitmap(dunkelgelb)
FARBE 3,0,0,0 ; Farbe belegte Bitmap(mittelgelb)
FARBE 4,0,0,0 ; Farbe linkes "Fenster"
FARBE 5,0,0,0 ; Farbe Umrandung dazu (rot)
FARBE 6,0,0,0 ; Farbe Directory (blau)
FARBE 7,0,0,0 ; Farbe Directory im text (braun)
FARBE 8,0,0,0 ; Farbe Kasten angeklickt (grün)
FARBE 9,0,0,0 ; Farbe Nr angeklickt (violett)
FARBE 10,0,0,0 ; Farbe Nr angeklickt header (violett)
FARBE 11,0,0,0 ; Farbe Meldungsschrift (rot)
FARBE 12,0,0,0 ; Farbe Directory (blau)
FARBE 13,0,0,0 ; Farbe Directory (blau)
FARBE 14,0,0,0 ; Farbe Directory (blau)
FARBE 15,0,0,0 ; Farbe Menu (blau)
rts
*---------------------------------------------------------------------------------
farben_meldung
FARBE 8,0,15,0 ; Farbe Kasten angeklickt (grün)
FARBE 11,15,0,15 ; Farbe Meldungsschrift (rot)
rts
* ------------- trackdisk-device öffnen--------
track_auf
move.l tr_open(a5),d0
cmp.l #0,d0
beq tr_ist_zu
PEN 2
bsr raster ; löscht Kästchenanziege
bsr linke_an_lö ; löscht linke Seite
move.l text_geo(a5),a1 ; geo löschen
move.l #spei_grö_text,d0
sub.l #1,d0
geo_l
move.b #0,(a1)+ ; löschen
dbra d0,geo_l
move.l _SysBase,a6
lea readrepl,a1
jsr _LVORemPort(a6) ; MsgPort entfernen
lea diskio,a1
jsr _LVOCloseDevice(a6) ; Device schließen
bsr block_sp_frei ; gibt alle geholten Sp-Blöcke Frei
move.l #0,gr_pfad(a5) ; Pfad-größe = 0
lea pfad_name(pc),a0
move.l #9,d0
pfad_leer
move.l #' ',(a0)+
dbra d0,pfad_leer
tr_ist_zu
move.l #1,tr_open(a5) ; Kennung setzen
move.l _SysBase,a6
sub.l a1,a1
jsr _LVOFindTask(a6) ; eigener task
move.l d0,readrepl+$10 ; eigner task als empfänger in MsgPort
lea readrepl,a1
jsr _LVOAddPort(a6) ; neuer Port
lea diskio,a1 ; I/O Struktur
move.l dfi(a5),d0 ; dfi
clr.l d1 ; keine flags
lea trdevice,a0 ; Zeiger auf Devicename in a0
jsr _LVOOpenDevice(a6) ; und Device öffnen
move.l all_num(a5),a0 ; NummernSpeicher löschen
move.l #1759,d0
tr_nr_loe
move.w #0,(a0)+
dbra d0,tr_nr_loe
move.l all_num(a5),lfd_num(a5) ; auf Anfang setzen
rts
*--------------------------------------------------------------------------
disk_eingelegt ; Block-Nr 0 ...1759 in d0 !!
move.l _SysBase,a6
lea diskio,a1
move.l #readrepl,14(a1) ; Zeiger auf Repl-Port
move.w #14,28(a1) ; 14=TD_Changestate
move.l bl_adr(a5),40(a1) ; puffer
move.l #0,36(a1) ; io_length
move.l #0,44(a1) ; IO_offset 0 ...
jsr _LVODoIo(a6) ; lesen
lea diskio,a1
move.l 32(a1),d0
cmp.l #0,d0
bne no_disk
rts
no_disk
move.l #1,meldung(a5) ; Meldungsfeld auf 1 setzen
bsr farben_schwarz
bsr farben_meldung
bsr neue_meldung
lea text_me1(pc),a0
move.l #15,d0
move.l rp(a5),a1
move.l dfi(a5),d1 ; i von dfi !
add.l #48,d1
move.b d1,13(a0)
jsr _LVOText(a6)
move.l (sp)+,d0 ; Stack zurücksetzen
bra warten
*--------------------------------------------------------------------------
neue_meldung
lea _GfxBase(pc),a6
move.l (a6),a6
PEN 4 ; Textfenster löschen
move.l rp(a5),a1 ; text fgewähltes feld löschen
move.l #text_x,d0
move.l #241,d1
move.l #text_xu,d2
move.l #249,d3
jsr _LVORectFill(a6)
PEN 11,4 ; Meldung schreiben
move.l rp(a5),a1
move.l #text_x,d0
move.l #248,d1
jsr _LVOMove(a6)
rts
*--------------------------------------------------------------------------
block_read ; Block-Nr 0 ...1759 in d0 !!
move.l _SysBase,a6
lea diskio,a1
move.l #readrepl,14(a1) ; Zeiger auf Repl-Port
move.w #$2,28(a1) ; $2=Read
move.l bl_adr(a5),40(a1) ; puffer
move.l #1*512,36(a1) ; io_length
mulu #512,d0
move.l d0,44(a1) ; IO_offset 0 ...
jsr _LVODoIo(a6) ; lesen
rts
*--------------------------------------------------------------------------
motor_aus
move.l _SysBase,a6
lea diskio,a1
move.w #9,28(a1) ; Motor
move.l #0,36(a1) ; länge 0
jsr _LVODoIo(a6)
rts
*--------------------------------------------------------------------------
doppel_spei
movem.l d2/a2,-(sp)
move.l _SysBase,a6
move.l #1,d1
jsr _LVOAvailMem(a6)
cmp.l #10000,d0
blt do_e ; mindestens 10 K,damit System noch Nachrichten
move.l #spei_grö,d0
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Speicherverwaltung
cmp.l #0,d0
beq do_e
move.l spei_verw(a5),a0
move.l spei_off(a5),d1
move.l d0,0(a0,d1)
move.l d0,d2 ; retten
add.l #4,spei_off(a5)
move.l d0,ueb_ga1(a5)
move.l #spei_grö,d0
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Speicherverwaltung
cmp.l #0,d0
beq do_e
move.l spei_verw(a5),a0
move.l spei_off(a5),d1
move.l d0,0(a0,d1)
add.l #4,spei_off(a5)
move.l d0,ueb_ga2(a5)
move.l d0,a0 ; gegenseitig verketten
move.l d2,a2
move.l d0,(a2)
move.l d2,(a0)
movem.l (sp)+,d2/a2
rts
do_e
movem.l (sp)+,d2/a2
move.l #1,meldung(a5) ; Meldungsfeld auf 1 setzen
bsr farben_schwarz
bsr farben_meldung
bsr neue_meldung
lea text_me2(pc),a0
move.l #17,d0
move.l rp(a5),a1
jsr _LVOText(a6)
bsr motor_aus
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$108,d0 ; botton 8 - Pick 100
jsr _LVOModifyIDCMP(a6)
move.l ak_dir(a5),a0 ; Kennung auf nicht gelesen setzen
move.l #0,ist_gelesen(a0) ; kennung = nicht gelesen !
lea 12(sp),sp ; Stack zurück
bra warten
*--------------------------------------------------------------------------
ein_spei
move.l _SysBase,a6
move.l #spei_grö,d0
move.l #$10000,d1 ; clear
jsr _LVOAllocMem(a6) ; Speicher fuer Speicherverwaltung
cmp.l #0,d0
beq ein_fe
move.l spei_verw(a5),a0
move.l spei_off(a5),d1
move.l d0,0(a0,d1)
add.l #4,spei_off(a5)
move.l d0,ueb_ga1(a5)
move.l #0,ueb_ga2(a5)
rts
ein_fe
lea -12(sp),sp ; Stack runterzählen
bra do_e
*--------------------------------------------------------------------------
block_sp_frei ; gibt die ganzen angesammelten Sp frei
move.l _SysBase,a6
move.l spei_off(a5),d6
cmp.l #0,d6
beq kein_spei
asr.l #2,d6 ; offset durch 4
sub.l #1,d6
move.l spei_verw(a5),a4
spei_frei
move.l #spei_grö,d0
move.l (a4)+,a1
jsr _LVOFreeMem(a6) ; Speicher fuer einen block zurück
dbra d6,spei_frei
kein_spei
move.l #0,spei_off(a5) ; Offset zurücksetzen
move.l #spei_grö_verw,d0 ; Verwaltung mit Nullen füllen
sub.l #1,d0
move.l spei_verw(a5),a0
mit_nullen
move.b #0,(a0)+
dbra d0,mit_nullen
rts
*--------------------------------------------------------------------------
block_umsp
move.l ueb_ga1(a5),a1
adda.l #off,a1
move.l bl_adr(a5),a0
move.l #127,d0
bl_um1
move.l (a0)+,(a1)+
dbra d0,bl_um1
rts
*--------------------------------------------------------------------------
bitmap_holen
move.l ueb_ga1(a5),a4 ; Orginal
lea 79*4(a4),a4
adda.l #off,a4 ; und anfangsoffset
move.l ueb_ga2(a5),a3 ; Schatten
lea 79*4(a3),a3
adda.l #off,a3 ; und anfangsoffset
move.l (a4)+,d0 ; Block Nr in d0
bsr block_read ; ein block lesen
bsr ein_spei ; Einfachspeicher anfordern
bsr block_umsp ; Block umspeichern
move.l ueb_ga1(a5),(a3)+ ; verketten
bit_wei
move.l (a4)+,d0 ; Block Nr in d0
cmp.l #0,d0
beq bit_ende
bsr block_read ; ein block lesen
bsr ein_spei ; Einfachspeicher anfordern
bsr block_umsp ; Block umspeichern
move.l ueb_ga1(a5),(a3)+ ; verketten
bra bit_wei
bit_ende
bsr motor_aus
rts
*--------------------------------------------------------------------------
bitmap_ausgeben
PEN 3 ; liefert auch gfxbase in a6
move.l bmflag(a5),d0 ; Bitmap Flag
cmp.l #1,d0
beq bit_aus0
PEN 2
bit_aus0
move.l spei_verw(a5),a4 ; in algemeiner Form holen
move.l 4(a4),a4 ; Schattenblock von Root ist 2. Block
lea 79*4(a4),a4 ; Adresse auf Sp mit Bitmap
adda.l #off,a4 ; und anfangsoffset
move.l #1,d6 ; da erstes Bit für Block 2 steht
bit_aus1
move.l (a4)+,a3
cmpa.l #0,a3
beq bit_aus_e
lea 4(a3),a3 ; ab da BMap
adda.l #off,a3 ; und anfangsoffset
bit_aus2
move.l (a3)+,d5
move.l #31,d4
bit_aus3
add.l #1,d6
cmp.l #1760,d6
beq bit_aus_e
btst.b #0,d5
bne bit_aus5 ; wenn gesetzt,dann frei u nicht markieren
bsr nr_zei
bit_aus5
move.l #1,d0
ror.l d0,d5
dbra d4,bit_aus3
bra bit_aus2
bit_aus_e
PEN 4 ; Feld mit angezeigtem Dateinamen löschen
move.l rp(a5),a1
move.l #text_x,d0
move.l #241,d1
move.l #text_xu,d2
move.l #249,d3
jsr _LVORectFill(a6)
rts
*--------------------------------------------------------------------------
nr_loeschen
PEN 3 ; liefert auch gfxbase in a6
move.l bmflag(a5),d0 ; Bitmap Flag
cmp.l #1,d0
beq nr_loe0
PEN 2
nr_loe0
move.l all_num(a5),a4 ; ^ auf Speicher aller gezeichneter Nummern
nr_loe1
clr.l d6
move.w (a4)+,d6
cmp.l #0,d6
beq nr_loe2
move.w #0,-2(a4) ; und nr löschen
bsr nr_zei
bra nr_loe1
nr_loe2
move.l all_num(a5),lfd_num(a5) ; auf Anfang setzen
rts
*--------------------------------------------------------------------------
nr_zei ; Nr übergabe in d6 ! !
movem.l a2/a3,-(sp)
move.l d6,d0
divu #22,d0
move.l d0,d1
ror.l #8,d0
ror.l #8,d0
and.l #$ff,d0 ; Nachkommateil 0 ... 21
and.l #$ff,d1 ; Vorkommateil 0 ... 79 Sektor
move.l xl1(a5),a2 ; Horizontalen x Wert berechnen
cmp.l #10,d0
ble nr_zei1
move.l xl2(a5),a2
sub.l #11,d0
nr_zei1
adda.l #10,a2
cmp.l #4,d0
ble nr_zei2
add.l #8,a2
nr_zei2
mulu #12,d0
adda.l d0,a2
move.l yl1(a5),a3 ; Vertikalen y Wert berechnen
adda.l #5,a3
cmp.l #39,d1
ble nr_zei5
adda.l #3,a3
nr_zei5
mulu #3,d1
adda.l d1,a3
bsr balken
movem.l (sp)+,a2/a3
rts
*--------------------------------------------------------------------------
frei_ermitteln
move.l _SysBase,a6
move.l #1,d1
jsr _LVOAvailMem(a6)
move.l d0,d2
bsr decl
lea buffer(pc),a0
lea mtext220(pc),a1
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.b (a0)+,(a1)+
rts
*--------------------------------------------------------------------------
dir_lesen
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$0,d0 ; keine meldung
jsr _LVOModifyIDCMP(a6)
move.l ak_dir(a5),ueb_ga1(a5)
move.l ak_dir(a5),a0
move.l #1,ist_gelesen(a0) ; kennung ,das dir bereits gelesen
dir1
move.l ueb_ga1(a5),a4 ; zuerst Dir vervollständigen
move.l a4,a3 ; retten
lea extension(a4),a4
move.l (a4),d0 ; Block Nr in d0
cmp.l #0,d0
beq dir2
move.l a1,-(sp) ; nur wegen Aussprung aus doppelsp
bsr block_read ; ein block lesen
bsr doppel_spei ; Doppelspeicher anfordern
bsr block_umsp ; Block umspeichern
move.l (sp)+,a1
move.l (a3),a3 ; aus gegens. alter verkettung in schatten
lea extension(a3),a3
move.l ueb_ga2(a5),(a3) ; im Schatten verketten
bra dir1
dir2
move.l ak_dir(a5),a4
dir3
move.l a4,a3
move.l (a4),a2 ; Schatten
lea hasch_v(a3),a3
lea hasch_v(a2),a2
move.l #5,d5 ; Zähler für Hasch 6...77
dir5
move.l (a2)+,d0 ; nur erhöhen
move.l (a3)+,d0
add.l #1,d5
cmp.l #78,d5
beq dir20 ; dann alle bis 78 durch
cmp.l #0,d0
beq dir10 ; kein eintrag
lea -4(a2),a1 ; Adr,wohin ^auf Sp eingetragen wird
move.l #1,d6 ; d6 ist Kennung ob weitere Blöcke
move.l #0,n_chain_n(a5) ; Zeiger auf next-chain nicht-schatten
move.l #0,n_chain_s(a5) ; " Schatten
dir7
cmp.l #0,d6
beq dir9
move.l a1,-(sp)
bsr block_read ; ein block lesen
bsr doppel_spei ; Doppelspeicher anfordern
bsr block_umsp ; Block umspeichern
move.l (sp)+,a1
move.l ueb_ga1(a5),a0 ; chain ?
move.l chain(a0),d0
cmp.l #0,d0
beq dir7_1
move.l ueb_ga1(a5),n_chain_n(a5) ; Zeiger auf Speicher merken
move.l ueb_ga2(a5),n_chain_s(a5) ; Zeiger auf Speicher merken
dir7_1
move.l ueb_ga2(a5),(a1) ; verketten
move.l #0,d6
move.l ueb_ga1(a5),a0
lea extension(a0),a0
move.l (a0),d0
cmp.l #0,d0 ; nächst Extension (wird auch in bl-read gebracht)
beq dir8
move.l ueb_ga1(a5),a0
lea sec_type(a0),a0
move.l (a0),d1
cmp.w #-3,d1 ; Section typ( -3 = File header)
bne dir8
move.l #1,d6
move.l ueb_ga2(a5),a0 ; a1 auf extension setzen
lea extension(a0),a1
dir8
bra dir7
dir9 ; nun alle chain holen (Anhang _c sonst fast wie oben)
dir6_c
move.l n_chain_s(a5),a1
lea chain(a1),a1 ; 1.wird in Cain verkettet,danach Extension
move.l #1,d6 ; d6 ist Kennung ob weitere Blöcke
move.l n_chain_n(a5),a0 ; Zeiger auf next-chain nicht-schatten
cmpa.l #0,a0
beq dir10_c ; Aussprung,wenn ^auf Spei wo Chain >< 0 selbst <> 0
move.l chain(a0),d0 ; Block-Nr holen
move.l #0,n_chain_n(a5) ; wieder 0 eintragen
dir7_c
cmp.l #0,d6
beq dir9_c
move.l a1,-(sp)
bsr block_read ; ein block lesen
bsr doppel_spei ; Doppelspeicher anfordern
bsr block_umsp ; Block umspeichern
move.l (sp)+,a1
move.l ueb_ga2(a5),(a1) ; verketten
move.l ueb_ga1(a5),a0 ; chain ?
move.l chain(a0),d0
cmp.l #0,d0
beq dir7_1_c
move.l ueb_ga1(a5),n_chain_n(a5) ; Zeiger auf Speicher merken
move.l ueb_ga2(a5),n_chain_s(a5) ; Zeiger auf Speicher merken
dir7_1_c
move.l #0,d6
move.l ueb_ga1(a5),a0
lea extension(a0),a0
move.l (a0),d0
cmp.l #0,d0 ; nächst Extension (wird auch in bl-read gebracht)
beq dir8_c
move.l ueb_ga1(a5),a0
lea sec_type(a0),a0
move.l (a0),d1
cmp.w #-3,d1 ; Section typ( -3 = File header)
bne dir8_c
move.l #1,d6
move.l ueb_ga2(a5),a0 ; a1 auf extension setzen
lea extension(a0),a1
dir8_c
bra dir7_c
dir9_c
bra dir6_c
dir10_c
bra dir5
dir10
bra dir5
dir20
move.l a4,a0
lea extension(a0),a0
move.l (a0),d0
cmp.l #0,d0
beq dir30 ; kein extension -> Aussprung
move.l (a4),a4 ; Verkettung -> Schatten
lea extension(a4),a4
move.l (a4),a4 ; zeigt auf erweiterung
move.l (a4),a4 ; Verkettung auf-> n schatten
bra dir3
dir30
bsr motor_aus
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$108,d0 ; botton 8 - Pick 100
jsr _LVOModifyIDCMP(a6)
rts
*--------------------------------------------------------------------------
text_ermitteln ; braucht alle Register
move.l a6,-(sp)
move.l text_roh(a5),a6 ; a6 ist hier der Zeiger auf Textspeicher
move.l text_zw(a5),a0 ; a6 ist hier der Zeiger auf Textspeicher
move.l text_geo(a5),a1 ; a6 ist hier der Zeiger auf Textspeicher
move.l #spei_grö_text,d0 ; zuerst immer löschen
sub.l #1,d0
erm1
move.b #0,(a6)+ ; löschen
move.b #0,(a0)+ ; löschen
move.b #0,(a1)+ ; löschen
dbra d0,erm1
move.l text_roh(a5),a6 ; a6 ist hier der Zeiger auf Textspeicher
move.l #0,d6 ; zählt alle Einträge
move.l ak_dir(a5),a4
erm3
move.l a4,a3
move.l (a4),a2 ; Schatten
lea hasch_v(a3),a3
lea hasch_v(a2),a2
move.l #5,d5 ; Zähler für Hasch 6...77
erm5
move.l #0,d2 ; kennung f dir (=1)
move.l (a2)+,a1 ; nur erhöhen
move.l (a3)+,d0
add.l #1,d5
cmp.l #78,d5
beq erm20 ; dann alle bis 78 durch
cmp.l #0,d0
beq erm10 ; kein eintrag
move.l a1,n_chain_s(a5)
move.l (a1),n_chain_n(a5)
erm51
move.l (a1),a1 ; schatten -> Block
move.l a1,a0
lea sec_type(a0),a0
move.l (a0),off_dir(a6) ; Typ in Text eintragen
move.l (a1),off_zei(a6) ; Zeiger auf Block eintragen
move.l a6,a0 ; retten um später zu erhöhen
lea name(a1),a1
clr d1
move.b (a1)+,d1 ; Anzahl Buchstaben
move.b d1,off_bu(a6)
sub.l #1,d1
move.l off_dir(a6),d2 ; Typ = Dir ?
cmp.w #2,d2
bne erm6
move.b #' ',(a0)+ ; dann 1 als Zwischenraum
erm6
erm7
move.b (a1)+,(a0)+
dbra d1,erm7
move.l off_dir(a6),d2 ; Typ = Dir ?
cmp.w #2,d2
bne erm8
move.b #' ',(a0)+ ; dann (dir) dahinter schreiben
move.b #'(',(a0)+
move.b #'d',(a0)+
move.b #'i',(a0)+
move.b #'r',(a0)+
move.b #')',(a0)+
add.b #7,off_bu(a6)
erm8
add.l #1,d6
adda.l #text_br,a6 ; um text,^,kennung erhöhen
bra erm11
erm10
bra erm5
erm11
move.l n_chain_n(a5),a0 ; Chain-Eintrag ?
move.l chain(a0),d0
cmp.l #0,d0
beq erm5 ; nicht,dann erm5
move.l n_chain_s(a5),a1
move.l chain(a1),a1 ; chain sind im Schatten verkettet
move.l a1,n_chain_s(a5)
move.l (a1),n_chain_n(a5)
bra erm51
erm20
move.l a4,a0
lea extension(a0),a0
move.l (a0),d0
cmp.l #0,d0
beq erm30 ; kein extension -> Aussprung
move.l (a4),a4 ; Verkettung -> Schatten
lea extension(a4),a4
move.l (a4),a4 ; zeigt auf erweiterung
move.l (a4),a4 ; Verkettung auf-> n schatten
bra erm3
erm30
move.l d6,an_dir(a5)
move.l ak_dir(a5),a0
move.l d6,dir_eintr(a0)
move.l #0,erste_im_dir(a5)
move.l (sp)+,a6
move.l ak_dir(a5),a0 ; Pfadnamen erweitern
lea name(a0),a0
move.l gr_pfad(a5),d0 ; Pfad-größe
lea pfad_name(pc),a1
adda.l d0,a1
clr d1
move.b (a0)+,d1 ; Namensgröße
add.l d1,gr_pfad(a5)
cmp.l #0,d0
beq erm33 ; wenn nicht erstes (also root-dir)
cmp.b #'/',-1(a1)
beq erm33 ; und nicht nach /
cmp.b #':',-1(a1)
beq erm33 ; und nicht nach :
move.b #'/',(a1)+
add.l #1,gr_pfad(a5)
erm33
sub.l #1,d1
erm35
move.b (a0)+,(a1)+
dbra d1,erm35
cmp.l #0,d0
bne erm36
add.l #1,gr_pfad(a5) ; Dir Doppelpunkt dranhängen
move.b #':',(a1)
erm36
rts
*--------------------------------------------------------------------------
text_ordnen
lea abc_anzahl(pc),a2 ; zählt die Namen zu den einzelnen Buchstaben
move.l text_zw(a5),a1 ; text_roh wird bei Text_ermitteln gelöscht
move.l #25,d6 ; für 26 Buchstaben
move.l #'A',d3
move.l #'a',d2
ordn0
move.b #0,(a2)+
move.l text_roh(a5),a0
move.l an_dir(a5),d5 ; Anzahl Zeilen
cmp.l #0,d5
beq ordn40
sub.l #1,d5
move.l #0,d1
ordn2
move.b (a0),d0
cmpi.w #2,off_dir+2(a0)
bne ordn3
move.b 1(a0),d0
ordn3
cmp.b d0,d3
beq ordn6
cmp.b d0,d2
beq ordn6
bra ordn16 ; dann nicht der Buchstabe
ordn6
add.b #1,-1(a2) ; Zähler erhöhen
clr d4
move.b off_bu(a0),d4 ; so lang ist der Name
sub.l #1,d4
move.l a0,a3
move.l a1,a4
cmpi.w #2,off_dir+2(a0) ; typ = dir ?
bne ordn7
sub.l #7,d4 ; wird kürzer um Blank und (dir)
adda.l #1,a3 ; 1. Blank weg
ordn7
ordn8
move.b (a3)+,d0 ; buchstaben übertragen
cmp.b #'a',d0
blt ordn10
cmp.b #'z',d0
bgt ordn10
sub.b #32,d0
ordn10
move.b d0,(a4)+
dbra d4,ordn8 ; Buchstaben umspeichern - Schl
move.l d1,off_off(a1)
adda.l #text_br,a1
move.b #1,off_hin(a0) ; kennung, daß übertragen
ordn16
add.l #text_br,d1
adda.l #text_br,a0
dbra d5,ordn2 ; 1 ... an_dir Schleife
add.b #1,d3 ; Buchstaben erhöhen
add.b #1,d2
dbra d6,ordn0 ; a - z schleife
; zw -> geo
; -----------
lea abc_anzahl(pc),a3 ; tatsächl. anzahl ermitteln
move.l text_geo(a5),a2 ; wenn überspr wird a2 hinten gebraucht
move.l text_roh(a5),a0
move.l text_zw(a5),a1
move.l #25,d5
ordn_20
clr d6
move.b (a3)+,d6
cmp.l #0,d6
beq ordn_30 ; wenn Null- nichts umspeichern
cmp.l #1,d6
bgt ordn_22 ; wenn > 1
move.l #0,d1
bsr zeile_um
adda.l #text_br,a1
bra ordn_30
ordn_22
sub.l #1,d6
ordn_23
move.l #$7FFFFFFF,a6
clr d3
move.b -1(a3),d3
sub.l #1,d3
move.l #0,d1
move.l #0,d2
ordn_25
move.b off_hin(a1,d1),d4
cmp.b #1,d4
beq ordn_27
move.l 0(a1,d1),a4
cmpa.l a6,a4
bgt ordn_27
move.l 0(a1,d1),a6 ; kleinstes
move.l d1,d2
ordn_27
add.l #text_br,d1
dbra d3,ordn_25
move.l d2,d1
bsr zeile_um
move.b #1,off_hin(a1,d1) ; Kennung setzen
dbra d6,ordn_23
clr d3 ; a1 um n X text_br erhöhen
move.b -1(a3),d3
sub.l #1,d3
ordn_29
adda.l #text_br,a1
dbra d3,ordn_29
ordn_30
dbra d5,ordn_20
ordn33
move.l an_dir(a5),d6 ; und den Rest übertragen
cmp.l #0,d6
beq ordn40
sub.l #1,d6 ; die z.B. mit . beginnen
move.l text_roh(a5),a0
ordn34
move.b off_hin(a0),d0
cmp.b #1,d0
beq ordn38
move.l a0,a1
move.l #text_br,d5
sub.l #1,d5
ordn36
move.b (a1)+,(a2)+
dbra d5,ordn36
ordn38
adda.l #text_br,a0
dbra d6,ordn34
ordn40
rts
*--------------------------------------------------------------------------
zeile_um
move.l off_off(a1,d1),d0
lea 0(a0,d0),a4
move.l #text_br,d4
sub.l #1,d4
zei_um1
move.b (a4)+,(a2)+
dbra d4,zei_um1
rts
*--------------------------------------------------------------------------
text_ausgeben
lea _GfxBase(pc),a6
move.l (a6),a6
bsr linke_an_lö
move.l #0,nr_gewählt(a5)
move.l ak_dir(a5),a0
move.l dir_eintr(a0),an_dir(a5)
move.l text_geo(a5),a4
move.l erste_im_dir(a5),d0
mulu #text_br,d0
adda.l d0,a4 ; a4 steht auf erste ausgebbare zeile
move.l a4,erste_merken(a5) ; um Mausclicks zu finden (überflüssig)
move.l erste_im_dir(a5),d6
move.l an_dir(a5),d5
move.l #text_y,d4
taus1
PEN 0,4
move.l off_dir(a4),d2 ; Typ = Dir ?
cmp.w #2,d2
bne taus2
PEN 7,4
taus2
move.l rp(a5),a1
move.l #text_x,d0
move.l d4,d1
jsr _LVOMove(a6)
clr d0
move.b off_bu(a4),d0
move.l a4,a0
move.l rp(a5),a1
jsr _LVOText(a6)
add.l #10,d4
cmp.l #230,d4
bgt taus3
add.l #1,d6
cmp.l d5,d6
bgt taus3
adda.l #text_br,a4
bra taus1
taus3
PEN 6,4 ; dir Name ausgeben
move.l rp(a5),a1
move.l #50,d0
move.l #20,d1
jsr _LVOMove(a6)
lea pfad_name(pc),a0
move.l gr_pfad(a5),d0
cmp.l #24,d0
bgt taus10
move.l rp(a5),a1
jsr _LVOText(a6)
rts
taus10
add.l d0,a0 ; nur die letzten 29 Buchstaben
suba.l #24,a0
move.l #24,d0
move.l rp(a5),a1
jsr _LVOText(a6)
move.l rp(a5),a1 ; und ....
move.l #50,d0
move.l #20,d1
jsr _LVOMove(a6)
lea vier_punkte(pc),a0
move.l #4,d0
move.l rp(a5),a1
jsr _LVOText(a6)
rts
*--------------------------------------------------------------------------
linke_an_lö
PEN 4 ; Textfenster löschen
move.l rp(a5),a1
move.l #text_x,d0
move.l #text_yo,d1
move.l #text_xu,d2
move.l #text_yu,d3
jsr _LVORectFill(a6)
move.l rp(a5),a1 ; text fgewähltes feld löschen
move.l #text_x,d0
move.l #241,d1
move.l #text_xu,d2
move.l #249,d3
jsr _LVORectFill(a6)
move.l rp(a5),a1 ; Dir Name löschen
move.l #50,d0
move.l #13,d1
move.l #text_xu,d2
move.l #21,d3
jsr _LVORectFill(a6)
rts
*--------------------------------------------------------------------------
n_oben_scr
; in d0 steht momemtane höchst Nr
; in d1 anzahl im Dir
movem.l d0-d1,-(sp)
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$8,d0 ; 8 nur MouseBottem (wegen Up)
jsr _LVOModifyIDCMP(a6)
movem.l (sp)+,d0-d1
move.l #1,d0
sub.l d4,d0
move.l erste_im_dir(a5),d1
move.l d0,an_sc(a5)
add.l #1,an_sc(a5)
neg.l an_sc(a5)
move.l text_geo(a5),a4
move.l d1,d3
mulu #text_br,d3
adda.l d3,a4 ; Zeiger auf textspeicherposition in geo
move.l #35,d5 ; y- Wert
move.l an_sc(a5),d6
neg.l d6
move.l #10,d3
divu d6,d3
move.l d3,d6
sub.l #1,d6 ; 4 oder 9 in d6
oben_1
bsr scrollen
suba.l #text_br,a4
bsr text_scr
sub.l #1,d1
cmp.l #0,d1
beq oben_2
dbra d0,oben_1
oben_2
move.l d1,erste_im_dir(a5)
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$118,d0 ; botton 8 - Pick 100 - Mousemove 10
jsr _LVOModifyIDCMP(a6)
rts
*--------------------------------------------------------------------------
n_unten_scr
; in d0 steht momemtane höchst Nr
; in d1 anzahl im Dir
movem.l d0-d1,-(sp)
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$8,d0 ; 8 nur MouseBottem (wegen Up)
jsr _LVOModifyIDCMP(a6)
movem.l (sp)+,d0-d1
move.l #an_zeilen,d2
sub.l d4,d2
move.l #1,d4
sub.l d2,d4
move.l d4,an_sc(a5)
add.l #1,an_sc(a5)
move.l text_geo(a5),a4
move.l d0,d3
mulu #text_br,d3
adda.l d3,a4 ; Zeiger auf textspeicherposition in geo
move.l #225,d5 ; y- Wert
move.l an_sc(a5),d6
move.l #10,d3
divu d6,d3
move.l d3,d6
sub.l #1,d6 ; 4 oder 9 in d6
unten_1
bsr scrollen
bsr text_scr
adda.l #text_br,a4
add.l #1,d0
cmp.l d1,d0
beq unten_2
dbra d4,unten_1
unten_2
sub.l #an_zeilen,d0
move.l d0,erste_im_dir(a5)
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$118,d0 ; botton 8 - Pick 100 - Mousemove 10
jsr _LVOModifyIDCMP(a6)
rts
*--------------------------------------------------------------------------
scrollen
movem.l d0-d6,-(sp)
lea _GfxBase(pc),a6
move.l (a6),a6
scro1 ; d6 von oben und gerettet ! (auf sp)
move.l rp(a5),a1
move.l #0,d0
move.l an_sc(a5),d1
move.l #text_x,d2
move.l #text_yo+1,d3
move.l #text_xu,d4
move.l #text_yu-5,d5
jsr _LVOScrollRaster(a6)
dbra d6,scro1
movem.l (sp)+,d0-d6
rts
*--------------------------------------------------------------------------
text_scr
movem.l d0-d6,-(sp)
PEN 0,4
move.l off_dir(a4),d2 ; Typ = Dir ?
cmp.w #2,d2
bne t_s1
PEN 7,4
t_s1
move.l rp(a5),a1
move.l #text_x,d0
move.l d5,d1
jsr _LVOMove(a6)
clr d0
move.b off_bu(a4),d0
move.l a4,a0
move.l rp(a5),a1
jsr _LVOText(a6)
movem.l (sp)+,d0-d6
rts
*--------------------------------------------------------------------------
datei_anzeigen
PEN 4 ; Feld löschen
move.l rp(a5),a1
move.l #text_x,d0
move.l #241,d1
move.l #text_xu,d2
move.l #249,d3
jsr _LVORectFill(a6)
move.l a4,-(sp)
bsr nr_loeschen ; alte Angaben immer löschen
move.l (sp)+,a4
PEN 10,4 ; gewählt schreiben
move.l rp(a5),a1
move.l #text_x,d0
move.l #248,d1
jsr _LVOMove(a6)
clr d0
move.b off_bu(a4),d0
move.l a4,a0
move.l rp(a5),a1
jsr _LVOText(a6)
move.l off_zei(a4),a3 ; zeigt auf Schatten
da1
PEN 10
move.l (a3),a2
move.l eigen(a2),d6 ; eigene Block nr ausgeben
move.l lfd_num(a5),a0
move.w d6,(a0)+
move.l a0,lfd_num(a5)
bsr nr_zei
lea hasch_v(a2),a2
move.l #5,d5
PEN 9
da2 ; und alle weiteren Blocks in anderer Farbe
add.l #1,d5
cmp.l #78,d5
beq da4
move.l (a2)+,d6
cmp.l #0,d6
beq da3
move.l lfd_num(a5),a0
move.w d6,(a0)+
move.l a0,lfd_num(a5)
bsr nr_zei
da3
bra da2
da4
move.l extension(a3),d0
cmp.l #0,d0
beq da5
lea extension(a3),a3
move.l (a3),a3
bra da1
da5
PEN 6
move.l ak_dir(a5),a2 ; und dazugehörige dir_Blocks ganz ausgeben
move.l (a2),a3 ; -> Schatten
da10
move.l (a3),a2
move.l eigen(a2),d6
cmp.l #0,d6
bne da11
move.l #880,d6
da11
move.l lfd_num(a5),a0
move.w d6,(a0)+
move.l a0,lfd_num(a5)
bsr nr_zei
move.l extension(a3),d0
cmp.l #0,d0
beq da12
lea extension(a3),a3
move.l (a3),a3
bra da10
da12
rts
*--------------------------------------------------------------------------
pfad_kuerzen
move.l gr_pfad(a5),d0 ; Pfad-größe
lea pfad_name(pc),a0 ; Pfadnamen um 2 kürzen
adda.l d0,a0
pfad_1 ; zuerst Pfad bis / oder : kürzen
move.b -(a0),d1
sub.l #1,d0
cmp.b #'/',d1
beq pfad_2
cmp.b #':',d1
beq pfad_2
bra pfad_1
pfad_2
pfad_3 ; dann bis / : oder Länge = = kürzen
move.b -(a0),d1
sub.l #1,d0
cmp.l #0,d0
beq pfad_5
cmp.b #'/',d1
beq pfad_5
cmp.b #':',d1
beq pfad_4
bra pfad_3
pfad_4
add.l #1,d0 ; dann : lassen
pfad_5
move.l d0,gr_pfad(a5)
rts
*--------------------------------------------------------------------------
*--------------------------------------------------------------------------
raster
PEN 2
move.l xl1(a5),d0 ; 2 große Rechtecke
move.l yl1(a5),d1
bsr raster1
move.l xl2(a5),d0
move.l yl2(a5),d1
bsr raster1
PEN 0
move.l xl1(a5),d0 ; 2 X senkrechter dicker Strich
move.l yl1(a5),d1
bsr raster2
move.l xl2(a5),d0
move.l yl2(a5),d1
bsr raster2
move.l xl1(a5),d0 ; 2 X waagerechter dicker Strich
move.l yl1(a5),d1
bsr raster3
move.l xl2(a5),d0
move.l yl2(a5),d1
bsr raster3
move.l xl1(a5),a3 ; senkrechte Linien
move.l yl1(a5),a4
bsr raster4
move.l xl2(a5),a3
move.l yl2(a5),a4
bsr raster4
move.l xl1(a5),a3 ; waagerechte Linien
move.l yl1(a5),a4
bsr raster5
move.l xl2(a5),a3
move.l yl2(a5),a4
bsr raster5
rts
raster1 ; Rechteck füllen
move.l rp(a5),a1
add.l #10,d0
add.l #5,d1
move.l d0,d2
move.l d1,d3
add.l #11*12-2+8,d2
add.l #80*3-1+3,d3
jsr _LVORectFill(a6)
rts
raster2 ; senkrechter schwarzer Balken
move.l rp(a5),a1
add.l #10,d0
add.l #5,d1
move.l d0,d2
move.l d1,d3
add.l #5*12-2,d0
add.l #5*12-2+8,d2
add.l #80*3-1+3,d3
jsr _LVORectFill(a6)
rts
raster3 ; waagerechter schwarzer Balken
move.l rp(a5),a1
add.l #10,d0
add.l #5,d1
move.l d0,d2
move.l d1,d3
add.l #40*3-1,d1
add.l #11*12-2+8,d2
add.l #40*3-1+3,d3
jsr _LVORectFill(a6)
rts
raster4 ; senkrechte Linien
adda.l #10+10,a3
adda.l #5,a4
move.l a4,d5
add.l #80*3-1+3,d5
move.l #4,d6
ras0
move.l rp(a5),a1
move.l a3,d0
move.l a4,d1
move.l a3,d2
add.l #1,d2
move.l d5,d3
jsr _LVORectFill(a6)
adda.l #12,a3
dbra d6,ras0
suba.l #12-8,a3
move.l #5,d6
ras1
move.l rp(a5),a1
move.l a3,d0
move.l a4,d1
move.l a3,d2
add.l #1,d2
move.l d5,d3
jsr _LVORectFill(a6)
adda.l #12,a3
dbra d6,ras1
rts
raster5 ; waagerechte Linien
adda.l #10,a3
adda.l #5+2,a4
move.l a3,d5
add.l #11*12-2+8,d5
move.l #78,d6
ras5
move.l rp(a5),a1
move.l a3,d0
move.l a4,d1
move.l d5,d2
move.l a4,d3
jsr _LVORectFill(a6)
adda.l #3,a4
cmp.l #40,d6
bne ras6
adda.l #6,a4
ras6
dbra d6,ras5
rts
*--------------------------------------------------------------------------
balken
move.l rp(a5),a1
move.l a2,d0
move.l a3,d1
move.l a2,d2
move.l a3,d3
add.l #9,d2
add.l #1,d3
jsr _LVORectFill(a6)
rts
*--------------------------------------------------------------------------
tabellieren
move.l #5,-8(a5)
move.l #24,-12(a5)
move.l xl1(a5),a2
lea text1(pc),a4
move.l #1,d6 ; Ober u Unterseite
tabe1
move.l yl1(a5),a3
adda.l #5,a3
move.l #3,d5 ; obere Hälfte
tabe2
bsr tex_bal
adda.l #30,a3
dbra d5,tabe2
adda.l #3,a3
move.l #3,d5 ; untere Hälfte
tabe3
bsr tex_bal
adda.l #30,a3
dbra d5,tabe3
move.l #-5,-8(a5)
move.l #-10,-12(a5)
move.l xr2(a5),a2
lea text1(pc),a4
dbra d6,tabe1
rts
*--------------------------------------------------------------------------
tex_bal
move.l rp(a5),a1
move.l a2,d0
move.l a3,d1
jsr _LVOMove(a6)
move.l rp(a5),a1
move.l a2,d0
sub.l -8(a5),d0
move.l a3,d1
jsr _LVODraw(a6)
move.l rp(a5),a1
move.l a2,d0
sub.l -12(a5),d0
move.l a3,d1
add.l #5,d1
jsr _LVOMove(a6)
move.l rp(a5),a1
move.l #2,d0 ; Länge
move.l a4,a0
jsr _LVOText(a6)
adda.l #2,a4
rts
*--------------------------------------------------------------------------
block_nr_aus ; xl_1,2 in a4, Mouse Koord in d4
move.l d4,d1
and.l #$FFFF,d1 ; -> y
move.l d1,mouse_y(a5)
sub.l #yl_1,d1
cmp.l #40*3,d1
bls nr_1
sub.l #3,d1
nr_1
divu #3,d1 ; -> track in d1
and.l #$FFFF,d1
move.l d1,track(a5)
move.l d4,d2
swap d2
and.l #$FFFF,d2 ; -> x
move.l d2,mouse_x(a5)
move.l a4,d0 ; - xl_1,2
sub.l d0,d2
cmp.l #5*12,d2
bls nr_2
sub.l #6,d2
nr_2
divu #12,d2 ; -> sektor in d2
and.l #$FFFF,d2
move.l d2,sektor(a5)
move.l d1,d0 ; track * 22
mulu #22,d0
add.l d2,d0 ; + sektor
move.l head(a5),d6
mulu #11,d6 ; + head * 11
add.l d0,d6 ; Block-Nr in d6
move.l d6,block(a5)
move.l alte_bl_nr(a5),d0
cmp.l d0,d6
bne nr_4
rts
nr_4 ; neue Block-Nr !
move.l d6,alte_bl_nr(a5)
move.l d0,d6
PEN 0
bsr nr_um ; alte Umrandung löschen
move.l alte_bl_nr(a5),d6
PEN 12
bsr nr_um ; neue Umrandung setzen
lea rastport_b(pc),a0
move.l (a0),rp(a5)
PEN 6,13
move.l block(a5),d2
bsr decl
TEXT #64,#24,8,buffer ; x,y,länge,^ auf Text
move.l track(a5),d2
bsr decl
TEXT #64,#34,8,buffer ; x,y,länge,^ auf Text
move.l head(a5),d2
bsr decl
TEXT #64,#44,8,buffer ; x,y,länge,^ auf Text
move.l sektor(a5),d2
bsr decl
TEXT #64,#54,8,buffer ; x,y,länge,^ auf Text
TEXT #24,#24,8,b_1 ; x,y,länge,^ auf Text
TEXT #24,#34,8,b_2 ; x,y,länge,^ auf Text
TEXT #24,#44,8,b_3 ; x,y,länge,^ auf Text
TEXT #24,#54,8,b_4 ; x,y,länge,^ auf Text
lea rastportv(pc),a0
move.l (a0),rp(a5)
lea _IntBase(pc),a6
move.l (a6),a6
lea windowv(pc),a0
move.l (a0),a0
move.l #$118,d0 ; botton 8 - Pick 100 - Move 10
jsr _LVOModifyIDCMP(a6)
move.l #1,select_down(a5)
lea window_b(pc),a0 ; kl Fenster nach vorne
move.l (a0),a0
jsr _LVOWindowToFront(a6)
move.l mouse_y(a5),d1
divu #3,d1 ; y * 2 Drittel
and.l #$FFFF,d1
mulu #2,d1
move.l mouse_x(a5),d0
sub.l #200,d0
lea window_b(pc),a0
move.l (a0),a0
sub.w 4(a0),d0
ext.l d0
sub.w 6(a0),d1
ext.l d1
lea window_b(pc),a0 ; Window bewegen
move.l (a0),a0
jsr _LVOMoveWindow(a6)
rts
*--------------------------------------------------------------------------
nr_um ; Nr übergabe in d6 ! !
movem.l a2/a3,-(sp)
move.l d6,d0
divu #22,d0
move.l d0,d1
ror.l #8,d0
ror.l #8,d0
and.l #$ff,d0 ; Nachkommateil 0 ... 21
and.l #$ff,d1 ; Vorkommateil 0 ... 79 Sektor
move.l xl1(a5),a2 ; Horizontalen x Wert berechnen
cmp.l #10,d0
ble nr_um1
move.l xl2(a5),a2
sub.l #11,d0
nr_um1
adda.l #10,a2
cmp.l #4,d0
ble nr_um2
add.l #8,a2
nr_um2
mulu #12,d0
adda.l d0,a2
move.l yl1(a5),a3 ; Vertikalen y Wert berechnen
adda.l #5,a3
cmp.l #39,d1
ble nr_um5
adda.l #3,a3
nr_um5
mulu #3,d1
adda.l d1,a3
suba.l #2,a2
suba.l #1,a3
bsr umrandung
movem.l (sp)+,a2/a3
rts
*--------------------------------------------------------------------------
umrandung ; braucht a2,a3,d4,d5 !!
move.l a2,d4
move.l a3,d5
add.l #13,d4
add.l #3,d5
RECHTECK a2,a3,d4,d5
rts
*--------------------------------------------------------------------------
info_engl
lea _IntBase(pc),a6
move.l (a6),a6
lea screen(pc),a0
lea screen_d(pc),a1
move.l (a0),(a1)
lea NewWindow_d(pc),a0 ; Window öffnen,_IntBase noch vorhanden
jsr _LVOOpenWindow(a6)
lea window_d(pc),a0 ; Windowzeiger sichern
move.l d0,(a0)
cmp.l #0,d0
beq window_d0
move.l d0,a0
move.l 50(a0),d0 ; Rastportadr. in d0
lea rastport_d(pc),a0 ; Rastportadr. sichern
move.l d0,(a0)
move.l d0,rp(a5)
lea _IntBase(pc),a6 ; Viewportadr. holen
move.l (a6),a6
lea window_d(pc),a0
move.l (a0),a0
jsr _LVOViewPortAdress(a6)
lea viewportad_d(pc),a0
move.l d0,(a0)
TEXT #20,#20,46,d_1 ; x,y,länge,^ auf Text
TEXT #20,#30,46,d_2 ; x,y,länge,^ auf Text
TEXT #20,#40,46,d_3 ; x,y,länge,^ auf Text
TEXT #20,#50,46,d_4 ; x,y,länge,^ auf Text
TEXT #20,#60,46,d_5 ; x,y,länge,^ auf Text
TEXT #20,#70,46,d_6 ; x,y,länge,^ auf Text
TEXT #20,#80,46,d_7 ; x,y,länge,^ auf Text
PEN 6
move.l rp(a5),a1
move.l #10,d0
move.l #15,d1
move.l #30,d2
move.l #20,d3
jsr _LVORectFill(a6)
PEN 10
move.l rp(a5),a1
move.l #10,d0
move.l #25,d1
move.l #30,d2
move.l #30,d3
jsr _LVORectFill(a6)
PEN 9
move.l rp(a5),a1
move.l #10,d0
move.l #35,d1
move.l #30,d2
move.l #40,d3
jsr _LVORectFill(a6)
warten_d
lea window_d(pc),a0 ; Hole Adr. MessagePort des Fensters
move.l (a0),a0
move.l 86(a0),a0 ; steht ab 86
move.l _SysBase,a6
jsr _LVOGetMsg(a6) ; Message vom Port in a0 holen
cmp.l #0,d0
beq warten_d ; 0,dann ligt keine Msg vor
move.l d0,a1 ; Zeiger auf die messagestruktur
move.l 20(a1),d3 ; Klasse der Message
move.l #0,d2
move.w 24(a1),d2 ; Code der Message
move.l 32(a1),d4 ; Mauskoor
jsr _LVOReplyMsg(a6) ; zurückschicken
cmp.l #$200,d3
bne warten_d
lea _IntBase(pc),a6 ; Window und Screen schließen
move.l (a6),a6
lea window_d(pc),a0
move.l (a0),a0
jsr _LVOCloseWindow(a6)
lea rastportv(pc),a0
move.l (a0),rp(a5) ; RP Hauptfenster zurück
window_d0
rts
*--------------------------------------------------------------------------
*--Screen,Window,-Strukturen-------------------------------------------
NewScreen
dc.w 0,0 ;links,oben
dc.w 640,256 ;breite,Höhe
dc.w 4 ;depth (Tiefe Bitebenen)
dc.b 0,1 ;pens (Farbe Titel-Text u.Titelleiste)
dc.w $8000 ;viewmodes (hier Sprite)
dc.w $F ;type (Customscreen)
dc.l 0 ;font
dc.l 0 ;title
dc.l 0 ;gadgets
dc.l 0 ;bitmap
NewWindow
dc.w 0,0 ;links, oben
dc.w 640,256 ;Breite, Hoehe
dc.b 0,1 ;Pens des Screen
dc.l $108 ; IDCMP-Flags hier Mousebuttons $8
dc.l $1a00 ;Window Flags hier nur Borderles $800
dc.l 0 ;KeinUser-Gadget
dc.l 0 ;keine User-Checkmark
dc.l 0 ;Titel des Window
screen ds.l 1 ; Zeiger auf eigenen Screen
dc.l 0 ;keine Super Bitmap
dc.w 100,20,640,256 ;Limits von Window-Groesse
dc.w $F ;Use our screen, eigener Screen=$f
windowv ds.l 1
cnop 0,4
rastportv ds.l 1
cnop 0,4
viewportadv ds.l 1
cnop 0,4
NewWindow_d
dc.w 150,80 ;links, oben
dc.w 420,90 ;Breite, Hoehe
dc.b 0,1 ;Pens des Screen
dc.l $200 ; IDCMP-Flags hier nur Windowclose $200
dc.l $1008 ;Window Flags hier nur windowclose $8
dc.l 0 ;KeinUser-Gadget
dc.l 0 ;keine User-Checkmark
dc.l win_titel ;Titel des Window
screen_d ds.l 1 ; Zeiger auf eigenen Screen
dc.l 0 ;keine Super Bitmap
dc.w 100,20,640,256 ;Limits von Window-Groesse
dc.w $F ;Use our screen, eigener Screen=$f
win_titel dc.b ' <- Continue <- Continue <- Continue',0
cnop 0,4
window_d ds.l 1
cnop 0,4
rastport_d ds.l 1
cnop 0,4
viewportad_d ds.l 1
cnop 0,4
d_1 dc.b ' Color of User-Directory-Block ',0
cnop 0,2
d_2 dc.b ' Color of File-Header and File-List-Blocks ',0
cnop 0,2
d_3 dc.b ' Color of all Data-Blocks ',0
cnop 0,2
d_4 dc.b ' - Bitmap without Boot-Blocks - ',0
cnop 0,2
d_5 dc.b ' - Choosing an empty dir,the Programm stops:',0
cnop 0,2
d_6 dc.b ' then continue by PARENT ',0
cnop 0,2
d_7 dc.b ' - continue now by close-gadget - ',0
cnop 0,2
NewWindow_b
dc.w 50,10 ;links, oben
dc.w 160,70 ;Breite, Hoehe
dc.b 0,1 ;Pens des Screen
dc.l $0 ; IDCMP-Flags hier keine
dc.l $800 ;Window Flags hier nur borderless $800
dc.l 0 ;KeinUser-Gadget
dc.l 0 ;keine User-Checkmark
dc.l 0 ;Titel des Window
screen_b ds.l 1 ; Zeiger auf eigenen Screen
dc.l 0 ;keine Super Bitmap
dc.w 50,20,640,256 ;Limits von Window-Groesse
dc.w $F ;Use our screen, eigener Screen=$f
window_b ds.l 1
cnop 0,4
rastport_b ds.l 1
cnop 0,4
viewportad_b ds.l 1
cnop 0,4
b_1 dc.b 'Block :',0
cnop 0,2
b_2 dc.b 'Track :',0
cnop 0,2
b_3 dc.b 'Head :',0
cnop 0,2
b_4 dc.b 'Sektor :',0
cnop 0,2
dosname dc.b 'dos.library',0
cnop 0,4
_DosBase ds.l 1
cnop 0,4
intname dc.b 'intuition.library',0
cnop 0,4
_IntBase ds.l 1
cnop 0,4
grafname dc.b 'graphics.library',0
cnop 0,4
_GfxBase ds.l 1
cnop 0,4
abc_anzahl ds.l 8
cnop 0,4
tabelle0 ds.l 40
tabelle
dc.l 280 ; xl1
dc.l 0 ; yl1
dc.l 440 ; xr1
dc.l 251 ; yr1
dc.l 450 ; xl2
dc.l 0 ; yl2
dc.l 610 ; xr2
dc.l 251 ; yr2
dc.l 0 ; xxl1
dc.l 0 ; yyl1
dc.l 250 ; xxr1
dc.l 235 ; yyr1
dc.l 0 ; xxl2
dc.l 239 ; yyl2
dc.l 250 ; xxr2
dc.l 251 ; yyr2
cnop 0,4
text1 dc.b ' 010203040506070'
cnop 0,4
text2 dc.b 'P a r e n t'
cnop 0,4
text3 dc.b 'Dir:'
cnop 0,4
pfad_name ds.l 20
cnop 0,4
vier_punkte dc.b '....',0
cnop 0,4
*------auf Quiet warten und Win u Scr schließen, Menu entfernen----------------------
*---------------------------- U-Prg um Hex in Dezimal zuwandeln ( in ASC II)
decl clr.b d3 ;0 = positive Zahl
tst.l d2 ;Zahl positiv Zahl in d2
bpl plus ;wenn so -----------
neg.l d2 ;sonst wandeln
move.b #1,d3 ;markiert negative Zahl
plus moveq #7,d0 ;8 Digits konnvertieren
lea buffer(pc),a0 ;+1 f. Platz f. Vorzeichen
lea pwrof10(pc),a1 ;Tabelle
nextt moveq #'0',d1 ;Fange mit Digit '0' an
dec addq #1,d1 ;Digit + 1
sub.l (a1),d2 ;noch drin?
bcc.s dec ;wenn so
subq #1,d1 ;korrigiere Digit
add.l (a1),d2 ;den auch
move.b d1,(a0)+ ;Digiit -> Buffer
lea 4(a1),a1 ;next power_10
dbra d0,nextt ;for 8 Digits
lea buffer(pc),a0 ;Nun 0-Unterdr. u. Vorz.
rep move.b #' ',(a0)+ ;fuehrende Nullen
cmp.b #'0',(a0) ; durch Blanks
beq rep ; ersetzen
tst.b d3 ;war Zahl negativ?
beq done ;wenn nicht
move.b #'-',-1(a0) ;sonst - vorsetzen
done
lea buffer(pc),a0
cmp.b #' ',7(a0)
bne done2
move.b #'0',7(a0)
done2
rts
pwrof10 dc.l 10000000
dc.l 1000000
dc.l 100000
dc.l 10000
dc.l 1000
dc.l 100
dc.l 10
dc.l 1
buffer ds.l 3
cnop 0,4
*-------------------------- Menuangaben----------------------
Menustruktur
MENUSTR 1,men_na2,0,0,100,menti1,item11 ; eigner MenuName,nächstes Menu,li,oben,Br,^Menutitel,^Itemstruktur
menti1 dc.b ' dfi',0
cnop 0,2
ITEMSTR 11,item12,0,0,100,12,$56,48 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 11,2,15,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext11 dc.b 'df0:',0
cnop 0,2
ITEMSTR 12,item13,0,12,100,12,$56,49 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 12,2,15,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext12 dc.b 'df1:',0
cnop 0,2
ITEMSTR 13,item14,0,24,100,12,$56,50 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 13,2,15,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext13 dc.b 'df2:',0
cnop 0,2
ITEMSTR 14,0,0,36,100,12,$56,51 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 14,2,15,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext14 dc.b 'df3:',0
cnop 0,2
* - - - - - - - - - - - - - - - - - - - -
MENUSTR 2,men_na3,100,0,100,menti2,item21 ; eigner MenuName,nächstes Menu,li,oben,Br,^Menutitel,^Itemstruktur
menti2 dc.b ' Tools',0
cnop 0,2
ITEMSTR 21,item22,0,0,100,12,$11b,0 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 21,2,3,2,2,0 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext21 dc.b ' BitMap',0
cnop 0,2
ITEMSTR 22,item23,0,12,100,12,$52,0 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 22,2,3,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext22 dc.b 'Show Memory',0
cnop 0,2
ITEMSTR 220,0,80,6,90,12,$12,0 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 220,2,3,2,2,0 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext220 dc.b ' ',0
cnop 0,2
ITEMSTR 23,item24,0,24,100,12,$52,0 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 23,2,3,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext23 dc.b 'Screen back',0
cnop 0,2
ITEMSTR 24,0,0,36,100,12,$52,0 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 24,2,3,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext24 dc.b 'Colors',0
cnop 0,2
* - - - - - - - - - - - - - - - - - - - -
MENUSTR 3,0,200,0,90,menti3,item31 ; eigner MenuName,nächstes Menu,li,oben,Br,^Menutitel,^Itemstruktur
menti3 dc.b 'Info/Quit',0
cnop 0,2
ITEMSTR 31,item32,0,0,90,12,$52,0 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 31,2,3,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext31 dc.b ' Info ',0
cnop 0,2
ITEMSTR 32,0,0,12,90,12,$52,0 ; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II
TEXTSTR 32,2,3,2,2,2 ; Strname,V-,H-Farbe,links,oben,Z-Modus
mtext32 dc.b ' Quit',0
cnop 0,2
*---------------------------------------------------------------
trdevice dc.b 'trackdisk.device',0
cnop 0,2
diskio ds.l 20
cnop 0,2
readrepl ds.l 8
cnop 0,2
diskbuffer ds.l 10
cnop 0,2
dfi_name dc.b 'DF0:DF1:DF2:DF3:',0
cnop 0,4
text_me1 dc.b 'No Disk in df :',0
cnop 0,4
text_me2 dc.b 'Not enough Memory',0
cnop 0,4